Skip to content

容器

什么是容器

容器,是一个视图隔离、资源可限制、独立文件系统的进程集合:

  • 视图隔离 - 如能看见部分进程;独立主机名等等;
  • 控制资源使用率 - 如 2G 内存大小;CPU 使用个数等等;

什么是镜像

镜像是容器所需要一切的文件集合,使用 Dockerfile 来描述镜像的构建过程

dockerfile
# 阶段1:构建环境(基于 golang:alpine)
FROM golang:1.19-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download      # 依赖下载(独立层)
COPY . .                 # 复制代码
RUN go build -o /myapp   # 编译生成二进制

# 阶段2:运行环境(基于纯净 alpine)
FROM alpine:3.16
WORKDIR /root/
COPY --from=builder /myapp .  # 仅复制二进制文件
CMD ["./myapp"]

构建过程中产生的文件变化:changeset

在构建的每一次操作都会构建成一个层(Layer),相同的层在不同的镜像中复用

运行容器

bash
docker pull busybox:1.25 #拉取镜像
docker run [-d] -name demo busybox:1.25

容器运行时的生命周期

  1. 创建阶段

    • docker create:创建容器文件系统(基于镜像层)和配置
    • 分配资源限制(cgroups)和命名空间(Namespaces)
  2. 运行阶段

    • docker start:执行入口点(ENTRYPOINT/CMD)
    • 主进程(PID 1)启动,容器进入运行状态
  3. 执行阶段

    • 主进程及其子进程运行
    • 可通过 docker exec 创建额外进程
  4. 停止阶段

    • docker stop:向 PID 1 发送 SIGTERM→等待→SIGKILL
    • 进程树被强制终止(若未优雅退出)
  5. 销毁阶段

    • docker rm:删除容器层(读写层)和运行时资源

容器的生命周期绑定于 PID 1 进程

数据持久化

特性Docker VolumeBind Mount
存储位置Docker 管理区域 (/var/lib/docker/volumes/)宿主机任意路径
创建方式docker volume create 或隐式创建直接指定宿主机路径
生命周期独立于容器依赖宿主机文件系统
数据所有权Docker 管理,自动权限处理需手动管理权限
备份迁移标准 Docker 工具支持依赖宿主机工具
性能接近原生原生性能
多容器共享原生支持需要协调路径
适用场景生产环境数据库、应用数据开发环境、配置文件、单机部署

容器 VS VM

特性VM容器
硬件资源需要Guest OS不需要Guest OS,进程级别的隔离
启动速度
隔离效果

最后更新于:

Released under the MIT License.